package com.dynabook.ems.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dynabook.ems.model.dto.BomListRequest;
import com.dynabook.ems.model.dto.CategoryOptions;
import com.dynabook.ems.model.entity.EmsBom;
import com.dynabook.ems.model.vo.*;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
* @author tester
* @description 针对表【ems_bom】的数据库操作Mapper
* @createDate 2025-07-21 15:20:05
* @Entity com.dynabook.ems.model.entity.EmsBom
*/
public interface EmsBomMapper extends BaseMapper<EmsBom> {
    @Select("select GETBOMNO() as BOMID;")
    String getBOMID();
    
    /**
     * 分页查询BOM列表
     * @param page 分页参数
     * @param bomListRequest 查询条件
     * @return BOM列表
     */
    Page<BomListVO> pageBomList(Page<BomListVO> page, @Param("request") BomListRequest request);
       /**
     * 根据BOMID查询BOM详细信息
     * @param bomId BOM编号
     * @return BOM详细信息
     */
    BomDetailVO getBomDetailById(String bomId);
    
    /**
     * 根据BOM编号和版本号查询BOM详细信息
     * @param bomNum BOM编号
     * @param version 版本号
     * @return BOM详细信息
     */
    BomDetailVO getBomDetailByNumAndVersion(@Param("bomNum") String bomNum, @Param("version") String version);
    
    /**
     * 根据BOM编号查询所有版本
     * @param bomNum BOM编号
     * @return 版本列表
     */
    @Select("SELECT DISTINCT version FROM ems_bom WHERE bom_num = #{bomNum} AND is_delete = 0 ORDER BY version")
    List<String> getVersionsByBomNum(@Param("bomNum") String bomNum);
    
    /**
     * 获取所有去重的成品型号
     * 
     * @return 成品型号列表
     */
    List<String> getDistinctFinishedProductModels();
    
    /**
     * 根据成品型号查询所有版本
     * @param finishedProductModel 成品型号
     * @return 版本列表
     */
    List<String> getVersionsByFinishedProductModel(@Param("finishedProductModel") String finishedProductModel);
    
    /**
     * 根据成品型号和版本号查询BOM详细信息
     * @param finishedProductModel 成品型号
     * @param version 版本号
     * @return BOM详细信息
     */
    BomDetailVO getBomDetailByFinishedProductModelAndVersion(@Param("finishedProductModel") String finishedProductModel, @Param("version") String version);

    List<CategoryOptions> getTypeOptions();
    
    /**
     * 查询导出数据
     * @param bomIds BOM ID列表，为null时查询所有数据
     * @return 导出数据列表
     */
    List<BomExportVO> getExportData(@Param("bomIds") List<Long> bomIds);

    /**
     * 查询导出数据总数
     * @param bomIds BOM ID列表，为null时查询所有数据
     * @return 数据总数
     */
    Long getExportDataCount(@Param("bomIds") List<Long> bomIds);

    /**
     * 分页查询导出数据
     * @param bomIds BOM ID列表，为null时查询所有数据
     * @param offset 偏移量
     * @param limit 每页数量
     * @return 导出数据列表
     */
    List<BomExportVO> getExportDataWithPaging(@Param("bomIds") List<Long> bomIds, 
                                              @Param("offset") int offset, 
                                              @Param("limit") int limit);

    List<OptionVO> getExistProductName(String productNamePrefix);

    List<OptionWorkOrderVO> getAssociatedWorkOrder(String bomId);

    List<BomDetailVO.BomDetailItem> getBomDetail(String bomId);
}




